package com.muyu.mapper;

import com.muyu.entity.DbUser;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @ClassName: DbUserMapper
 * @Author: Zirun.Xin
 * @Date: 2024/12/31 15:26
 * @Version: 1.0
 * @Description: 用户持久层
 */
@Repository
public interface DbUserMapper {

    /**
     * 根据ID查询用户
     * @param id 主键
     * @return 用户对象
     */
    @Select(value = "SELECT * FROM db_user WHERE id = #{id}")
    DbUser selectById(@Param(value = "id") String id);

    /**
     * 根据名称查询用户
     * @param name 名称
     * @return 用户对象
     */
    DbUser selectByName(@Param(value = "name") String name);

    /**
     * 插入用户
     * @param id 主键
     * @param name 名称
     * @param describes 简介
     * @return 响应行数
     */
    @Insert(value = "INSERT INTO db_user(id, name, describes) VALUES(#{id}, #{name}, #{describes})")
    int insert(@Param(value = "id") String id, @Param(value = "name") String name,
               @Param(value = "describes") String describes);

    /**
     * 根据map插入用户
     * @param map 键值对插入内容
     * @return 响应行数
     */
    @Insert(value = "INSERT INTO db_user(id,name, describes) " +
            "VALUES( #{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{describes,jdbcType=VARCHAR})")
    int insertByMap(Map<String, Object> map);

    /**
     * 根据实体插入用户
     * @param dbUser 用户插入内容
     * @return 响应行数
     */
    @Insert(value = "INSERT INTO db_user(id, name, describes) VALUES (#{id}, #{name}, #{describes})")
    int insertByEntity(DbUser dbUser);

    /**
     * 插入用户
     * @param id 主键
     * @param name 名称
     * @param describes 简介
     * @return 响应行数
     */
    int insertUser(@Param(value = "id") String id, @Param(value = "name") String name,
                   @Param(value = "describes") String describes);

    /**
     * 根据ID更新用户
     * @param dbUser 用户实体
     */
    @Update(value = "UPDATE db_user SET name = #{name}, describes = #{describes} WHERE id = #{id}")
    void updateById(DbUser dbUser);

    /**
     * 根据ID删除用户
     * @param id 主键
     */
    @Delete(value = "DELETE FROM db_user WHERE id = #{id}")
    void deleteById(@Param(value = "id") String id);

    /**
     * 根据大于等于ID查询
     * @return 用户结果集
     */
    List<DbUser> selectListByIdGe();

    /**
     * 根据小于等于ID查询
     * @return 用户结果集
     */
    List<DbUser> selectListByIdLe();

    /**
     * 根据不等于ID查询
     * @return 用户结果集
     */
    List<DbUser> selectListByIdNote();

    /**
     * 根据转义符大于等于ID查询
     * @return 用户结果集
     */
    List<DbUser> selectListByIdEscapeCharacterGe();

    /**
     * 根据转义符小于等于ID查询
     * @return 用户结果集
     */
    List<DbUser> selectListByIdEscapeCharacterLe();

    /**
     * 根据转义符不等于ID查询
     * @return 用户结果集
     */
    List<DbUser> selectListByIdEscapeCharacterNote();
}
